perm filename TALK.MID[S,NET] blob
sn#697652 filedate 1983-01-28 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 NIORTS CORBEG ITSP NETOP PDL USRBUF HSTBUF SSOC RSOC SHAN RHAN COREND
C00003 00003 TALK CMDSCN GETCMD GETUSR GETHST SPCLUZ GETHCH
C00005 00004 GOGOGO
C00006 00005 LNKILP LNKIDN LNKMSG SNDPRG PRGSPC
C00007 00006 ZZZ MAINLP
C00009 00007 LOSER GETSC1 SC1DUN GTRHAN RHANDN GETSC2 SC2DUN GTSHAN SHANDN RHANLP RHALDN
C00011 00008 SHANLP SHALDN RHANL1 RHALD1 SHANL1 SHALD1 LNKIL1 LNKID1
C00013 00009 BBNSUX SNDRUB SNTRUB
C00014 00010 TXTSTR TXTOCH TXTSND TXTICH CMDSTR OCTOUT RESPON LOST GETMSG WAITGA
C00016 ENDMK
C⊗;
;NIORTS CORBEG ITSP NETOP PDL USRBUF HSTBUF SSOC RSOC SHAN RHAN COREND
TITLE TALK
; QUICK NETWORK TALK KLUDGE
NIORTS==-1 ? DATRTS==-1 ? ERRHAN==-1 ? HSTTAB==-1 ; MARVELOUS NETWORK ROUTINES
.INSRT NETWRK
CORBEG==.
ITSP: BLOCK 1.
NETOP: BLOCK 1.
PDL: BLOCK 40.
USRBUF: BLOCK 10.
HSTBUF: BLOCK 10.
SSOC: BLOCK 1
RSOC: BLOCK 1.
SHAN: BLOCK 5.
RHAN: BLOCK 5.
COREND==.-1
;TALK CMDSCN GETCMD GETUSR GETHST SPCLUZ GETHCH
SUBTTL INITIALIZATION AND COMMAND PARSING
TALK: JFCL
RESET
MOVE 17,[PDL(-40)]
SETZM CORBEG
MOVE [CORBEG,,CORBEG+1]
BLT COREND
MOVEI [DISMIS] ; SIMPLE INTERRUPT SERVER!
MOVEM JOBAPR
RESCAN 1
JUMPE 1,GETCMD
INCHRS
JRST GETCMD
CAIE "T
CAIN "t
SKIPA 1,[" ]
MOVEI 1,";
CMDSCN: INCHRS
JRST GETCMD
CAIE ↑J
CAIN 175
JRST GETCMD
CAIE (1)
JRST CMDSCN
CAIA
GETCMD: OUTSTR [ASCIZ/To: /]
; GET USER NAME
MOVE 1,[440700,,USRBUF]
GETUSR: INCHWL
CAIN ↑M
JRST GETUSR
CAIE 175
CAIN ↑J
JRST [OUTSTR [ASCIZ/Missing host name./]
JRST SPCLUZ]
CAIE "% ; CRETIN SAIL CONVENTION
CAIN "@
JRST GETHST
IDPB 1
JRST GETUSR
; GET HOST NAME
GETHST: MOVE 1,[440700,,HSTBUF]
SKIPE USRBUF
JRST GETHCH
OUTSTR [ASCIZ/Missing user name./]
SPCLUZ: OUTSTR [ASCIZ/ You must say <user>@<host>.
/]
CLRBFI
JRST TALK
GETHCH: INCHWL
CAIE <" >
CAIN ↑M
JRST GETHCH
CAIE 175
CAIN ↑J
JRST GOGOGO
IDPB 1
JRST GETHCH
;GOGOGO
SUBTTL FIRE UP A CONNECTION
GOGOGO: PUSHJ 17,MAPHST
MOVEI HSTBUF
PUSHJ 17,HSTNAM
JRST [ OUTSTR [ASCIZ/No such host.
/]
CLRBFI
PUSHJ 17,UNMHST
JRST TALK]
JRST [ OUTSTR [ASCIZ/Ambiguous host name.
/]
CLRBFI
PUSHJ 17,UNMHST
JRST TALK]
MOVEM HOST
HLRZS 1
MOVE (1)
CAMN [ASCII/ITS/] ; ITSes have winning LINKI
SETOM ITSP
PUSHJ 17,UNMHST
MOVEI 365
MOVEM ICPSKT
PUSHJ 17,CONECT
PTJOBX [0 ? 3]
CLKINT 60.*2.
MOVSI 020210
INTENB
JSP 1,CMDSTR
ASCIZ/ERSTR
/
PUSHJ 17,NETSND
PUSHJ 17,WAITGA
SKIPN ITSP
JRST LOSER
; FALLS THROUGH
;LNKILP LNKIDN LNKMSG SNDPRG PRGSPC
SUBTTL LINK TO WINNERS
JSP 1,CMDSTR
ASCIZ/LINKI /
MOVE 1,[440700,,USRBUF]
LNKILP: ILDB 1
JUMPE LNKIDN
PUSHJ 17,NETOCH
JRST LNKILP
LNKIDN: JSP 1,CMDSTR
ASCIZ/
/
PUSHJ 17,NETSND
PUSHJ 17,RESPON
PUSHJ 17,WAITGA
; WINNER OR LOSER, WE EVENTUALLY END UP HERE
LNKMSG: LOCK
JSP 1,TXTSTR
ASCIZ/[Network link from /
GETPPN 1,
JFCL
LSH 1,18.
SNDPRG: SETZ
LSHC 6
JUMPE PRGSPC
ADDI "A-'A
PUSHJ 17,TXTOCH
PRGSPC: JUMPN 1,SNDPRG
JSP 1,TXTSTR
ASCIZ/@SAIL]
/
PUSHJ 17,TXTSND
OUTSTR [ASCIZ/Go ahead:
/]
; FALLS THROUGH
;ZZZ MAINLP
SUBTTL TOP LEVEL
ZZZ: IWAIT
MAINLP: INCHRS
JRST [ PUSHJ 17,TXTICH
JRST [ SKIPE NETOP
PUSHJ 17,TXTSND
JRST ZZZ]
CAIN 176 ; ~
MOVEI 32
CAIN 175 ; }
MOVEI 176
CAIN ↑G
JRST [ HRROI -1
BEEP
JRST MAINLP]
OUTCHR
JRST MAINLP]
TRZE 400
JRST [ CAIN 200\↑J
EXIT
TRZ 40 ; UGH BLETCH
CAIE 200\"Q
CAIN "Q
EXIT
CAIN 200\"L ; UGH!!!!
JRST [ MOVE [INCHRS]
MOVEM MAINLP
JRST MAINLP]
CAIE "L
JRST MAINLP
MOVE [INCHSL]
MOVEM MAINLP
JRST MAINLP]
TRZE 200
ANDI 37 ; ASCII CONTROLLIFY?
CAIN ↑G
JRST [ HRROI 1,-1
BEEP 1,
JRST .+2]
OUTCHR
CAIN 176 ; }
MOVEI 175
CAIN 32 ; ~
MOVEI 176
PUSHJ 17,TXTOCH
SETOM NETOP
JRST MAINLP
;LOSER GETSC1 SC1DUN GTRHAN RHANDN GETSC2 SC2DUN GTSHAN SHANDN RHANLP RHALDN
SUBTTL LINK TO LOSERS
LOSER: JSP 1,CMDSTR
ASCIZ/AUXS S 8
AUXS R 8
/
PUSHJ 17,NETSND
PUSHJ 17,RESPON
SETZ 3,
GETSC1: PUSHJ 17,NETICW
SUBI "0
JUMPL SC1DUN ; BLETCHEROUS CROCK DUE TO CRETIN NETWRK
LSH 3,3
ADD 3,
JRST GETSC1
SC1DUN: MOVEM 3,RSOC
MOVE 3,[440700,,RHAN] ; THEIR SEND SOCKET'S HANDLE
GTRHAN: PUSHJ 17,NETICW
CAIN "+
JRST RHANDN
IDPB 3
JRST GTRHAN
RHANDN: PUSHJ 17,RESPON
SETZ 3,
GETSC2: PUSHJ 17,NETICW
SUBI "0
JUMPL SC2DUN
LSH 3,3
ADD 3,
JRST GETSC2
SC2DUN: MOVEM 3,SSOC
MOVE 3,[440700,,SHAN] ; THEIR RECEIVE SOCKET'S HANDLE
GTSHAN: PUSHJ 17,NETICW
CAIN "+
JRST SHANDN
IDPB 3
JRST GTSHAN
SHANDN: PUSHJ 17,WAITGA
JSP 1,CMDSTR
ASCIZ/CONN /
MOVE 1,[440700,,RHAN]
RHANLP: ILDB 1
JUMPE RHALDN
PUSHJ 17,NETOCH
JRST RHANLP
RHALDN: MOVEI <" >
PUSHJ 17,NETOCH
MOVE LSOCKT
ADDI 4
PUSHJ 17,OCTOUT
JSP 1,CMDSTR
ASCIZ/
/
PUSHJ 17,NETSND
MOVE RSOC
SUBI 3
MOVEM FSOCKT ; FAKE OUT NETWRK
PUSHJ 17,DATI
CAIE 8.
JRST 4,.-1
PUSHJ 17,RESPON
PUSHJ 17,WAITGA
; FALLS THROUGH
;SHANLP SHALDN RHANL1 RHALD1 SHANL1 SHALD1 LNKIL1 LNKID1
; MORE FOR LOSERS
JSP 1,CMDSTR
ASCIZ/CONN /
MOVE 1,[440700,,SHAN]
SHANLP: ILDB 1
JUMPE SHALDN
PUSHJ 17,NETOCH
JRST SHANLP
SHALDN: MOVEI <" >
PUSHJ 17,NETOCH
MOVE LSOCKT
ADDI 5
PUSHJ 17,OCTOUT
JSP 1,CMDSTR
ASCIZ/
/
PUSHJ 17,NETSND
MOVE SSOC
SUBI 2
MOVEM FSOCKT ; FAKE OUT NETWRK
MOVEI 8.
PUSHJ 17,DATO
CAIE 8.
JRST 4,.-1
PUSHJ 17,RESPON
PUSHJ 17,WAITGA
JSP 1,CMDSTR
ASCIZ/LINK /
MOVE 1,[440700,,RHAN]
RHANL1: ILDB 1
JUMPE RHALD1
PUSHJ 17,NETOCH
JRST RHANL1
RHALD1: MOVEI <" >
PUSHJ 17,NETOCH
MOVE 1,[440700,,SHAN]
SHANL1: ILDB 1
JUMPE SHALD1
PUSHJ 17,NETOCH
JRST SHANL1
SHALD1: MOVEI <" >
PUSHJ 17,NETOCH
MOVE 1,[440700,,USRBUF]
LNKIL1: ILDB 1
JUMPE LNKID1
PUSHJ 17,NETOCH
JRST LNKIL1
LNKID1: JSP 1,CMDSTR
ASCIZ/
/
PUSHJ 17,NETSND
; FALLS THROUGH
;BBNSUX SNDRUB SNTRUB
SUBTTL MARVELOUS CROCK, COURTESY OF BBN!
BBNSUX: MOVEI 16 ; GODDAM BAGBITING SAIL+TENEX!
MTAPE DAT,
JUMPN 7,SNDRUB
PUSHJ 17,NETICH
CAIA
JRST [CAIN "+
JRST [ MOVEI 177
PUSHJ 17,DATOCH
PUSHJ 17,DATSND
JRST SNTRUB]
CAIN "-
JRST LOST
JRST BBNSUX] ; BOY DO THEY EVER
MOVEI 1
SLEEP
JRST BBNSUX ; LONG AND HARD
SNDRUB: MOVEI 177 ; CRETIN TENEX
PUSHJ 17,DATOCH
PUSHJ 17,DATSND
PUSHJ 17,RESPON
SNTRUB: PUSHJ 17,WAITGA
JRST LNKMSG
;TXTSTR TXTOCH TXTSND TXTICH CMDSTR OCTOUT RESPON LOST GETMSG WAITGA
SUBTTL SUBROUTINES
TXTSTR: HRLI 1,440700 ; OUTPUT A COMMAND STRING
ILDB 1
JUMPE 1(1)
PUSHJ 17,TXTOCH
JRST TXTSTR+1
TXTOCH: SKIPE ITSP
JRST NETOCH
JRST DATOCH
TXTSND: SKIPE ITSP
JRST NETSND
JRST DATSND
TXTICH: SKIPE ITSP
JRST NETICH
JRST DATICH
CMDSTR: HRLI 1,440700 ; OUTPUT A COMMAND STRING
ILDB 1
JUMPE 1(1)
PUSHJ 17,NETOCH
JRST CMDSTR+1
OCTOUT: IDIVI 10
PUSH 17,1
SKIPE
PUSHJ 17,OCTOUT
POP 17,
ADDI "0
JRST NETOCH
RESPON: PUSHJ 17,NETICW ; GET A RESPONSE
CAIN "+
POPJ 17,
CAIE "-
JRST RESPON
LOST: PUSHJ 17,NETICW
CAIE <" >
JRST LOST
GETMSG: PUSHJ 17,NETICW
OUTCHR
CAIE ↑J
JRST GETMSG
EXIT ; JUST CLOSE ON THE LOSER
WAITGA: PUSHJ 17,NETICW ; WAIT FOR GA
CAIE "@
JRST WAITGA
POPJ 17,
END TALK